home *** CD-ROM | disk | FTP | other *** search
Wrap
'************************************************************************** '* Q/Media For Windows Setup '************************************************************************** '$INCLUDE 'setupapi.inc' '$INCLUDE 'msdetect.inc' '$INCLUDE 'mscpydis.inc' ''Dialog ID's CONST WELCOME = 100 CONST ASKQUIT = 200 CONST DESTPATH = 300 CONST CLOBBER = 301 CONST RESTART = 302 CONST SHARE_NOTE = 303 CONST EXITFAILURE = 400 CONST EXITQUIT = 600 CONST EXITSUCCESS = 700 CONST OPTIONS = 800 CONST APPHELP = 900 CONST DRVCHK = 1000 CONST MULTILIST = 3900 CONST CUSTINST = 6200 CONST TOOBIG = 6300 CONST BADPATH = 6400 ''Bitmap ID CONST LOGO = 1 ''File Types CONST APPFILES = 1 CONST OPTFILES1 = 2 CONST OPTFILES2 = 3 '' Global Variables GLOBAL DEST$ GLOBAL WINDRIVE$ GLOBAL SRCDRIVE$ GLOBAL OPT1OPT$ GLOBAL OPT2OPT$ GLOBAL RESTARTWIN% GLOBAL RESTARTWINCUST% GLOBAL REBOOTMSG% ''Install list symbol names GLOBAL APPNEEDS$ ''Option list costs per drive GLOBAL OPT1NEEDS$ GLOBAL OPT2NEEDS$ GLOBAL OPT3NEEDS$ GLOBAL OPT4NEEDS$ GLOBAL OPT5NEEDS$ GLOBAL EXTRACOSTS$ ''List of extra costs to add per drive GLOBAL BIGLIST$ ''List of option files cost calc results (boolean) ''Dialog list symbol names GLOBAL CHECKSTATES$ GLOBAL STATUSTEXT$ GLOBAL DRIVETEXT$ GLOBAL SHORTLIST$ GLOBAL DECIDED% GLOBAL CHOSENFILES1% ''Function Declarations DECLARE SUB AddOptFilesToCopyList (ftype%) DECLARE SUB RecalcOptFiles (ftype%) DECLARE SUB RecalcPath DECLARE SUB SetDriveStatus DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING DECLARE FUNCTION OnWindowsNT LIB "INIUPD.DLL" AS INTEGER DECLARE FUNCTION VflatdPresent LIB "INIUPD.DLL" AS INTEGER DECLARE FUNCTION IsShareActive LIB "SHARECHK.DLL" AS INTEGER DECLARE FUNCTION PostMessage LIB "USER" (hwnd%, msg%, wparam%, lparam&) AS INTEGER DECLARE FUNCTION RegisterWindowMessage LIB "USER" (szRebootMessage$) AS INTEGER DECLARE SUB AddSomeFilesToCopyList (Section$, Src$, Dst$, Keys$) DECLARE SUB CreateInstallLog DECLARE SUB DoShareInstall DECLARE SUB DoDMABufferMod DECLARE SUB DoOLE2Reg DECLARE SUB DoVideoForWindowsInstall DECLARE SUB DoAutodeskInstall DECLARE SUB DoAWIInstall DECLARE SUB NOROOM DECLARE SUB ShowWindow LIB "user.exe" (hwnd%, size%) INIT: CUIDLL$ = "mscuistf.dll" ''custom user interface dll HELPPROC$ = "FHelpDlgProc" ''Help dialog procedure VERSION% = GetWindowsMajorVersion() IF VERSION% < 3 THEN GOTO WRONGVER END IF VERSION% = GetWindowsMinorVersion() IF VERSION% < 10 THEN GOTO WRONGVER END IF PROCESSOR% = GetProcessorType() IF PROCESSOR% < 3 THEN GOTO WRONGPROCESSOR END IF ShowWindow HwndFrame, 3 SetBitmap CUIDLL$, LOGO SetTitle "Q╖Media CD-ROM Demonstration" szInf$ = GetSymbolValue("STF_SRCINFPATH") IF szInf$ = "" THEN szInf$ = GetSymbolValue("STF_CWDDIR") + "SETUP.INF" END IF ReadInfFile szInf$ WINDRIVE$ = MID$(GetWindowsDir, 1, 1) DEST$ = WINDRIVE$ + ":\QMDEMO" SRCDRIVE$ = MID$(GetSymbolValue("STF_SRCDIR"), 1, 1) ''Register Reboot Windows Message REBOOTMSG% = RegisterWindowMessage("NSetup") ''CustInst list symbols CHECKSTATES$ = "CheckItemsState" STATUSTEXT$ = "StatusItemsText" DRIVETEXT$ = "DriveStatusText" FOR i% = 1 TO 3 STEP 1 AddListItem CHECKSTATES$, "ON" NEXT i% FOR i% = 1 TO 3 STEP 1 AddListItem STATUSTEXT$, "" NEXT i% FOR i% = 1 TO 7 STEP 1 AddListItem DRIVETEXT$, "" NEXT i% ReplaceListItem DRIVETEXT$, 7, DEST$ ''Disk cost list symbols APPNEEDS$ = "AppNeeds" OPT1NEEDS$ = "Opt1Needs" OPT2NEEDS$ = "Opt2Needs" EXTRACOSTS$ = "ExtraCosts" BIGLIST$ = "BigList" SHORTLIST$ = "ShortList" DECIDED% = 0 RESTARTWIN% = 0 RESTARTWINCUST% = 0 FOR i% = 1 TO 3 STEP 1 AddListItem BIGLIST$, "" NEXT i% FOR i% = 1 TO 26 STEP 1 AddListItem EXTRACOSTS$, "0" NEXT i% FOR i% = 1 TO 26 STEP 1 AddListItem SHORTLIST$, "" NEXT i% RecalcPath SetDriveStatus SetCopyGaugePosition 120, 75 ''Greeting sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$) IF sz$ = "EXIT" THEN GOSUB ASKQUIT ELSE UIPop 1 GOTO CUSTINST END IF CUSTINST: sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$) IF sz$ = "CONTINUE" THEN ''Install only if it will fit. FOR i% = 1 TO 3 STEP 1 IF GetListItem(BIGLIST$, i%) <> "" THEN GOSUB TOOBIG GOTO CUSTINST END IF NEXT i% IF DoesDirExist(DEST$) = 1 AND DECIDED% = 0 THEN ''Dir already exists sz$ = UIStartDlg(CUIDLL$, CLOBBER, "FInfo0DlgProc", 0, "") UIPop 1 IF sz$ = "CONTINUE" THEN DECIDED% = 1 ELSE GOTO GETPATH END IF END IF UIPop 1 GOTO INSTALL ELSEIF sz$ = "PATH" THEN GOTO GETPATH ELSEIF sz$ = "CHK1" THEN RecalcOptFiles APPFILES SetDriveStatus GOTO CUSTINST ELSEIF sz$ = "CHK2" THEN RecalcOptFiles OPTFILES1 SetDriveStatus GOTO CUSTINST ELSEIF sz$ = "CHK3" THEN RecalcOptFiles OPTFILES2 SetDriveStatus GOTO CUSTINST ELSEIF sz$ = "REACTIVATE" THEN RecalcPath SetDriveStatus GOTO CUSTINST ELSE GOSUB ASKQUIT GOTO CUSTINST END IF INSTALL: ClearCopyList AddOptFilesToCopyList APPFILES AddOptFilesToCopyList OPTFILES1 AddOptFilesToCopyList OPTFILES2 CreateDir DEST$, cmoNone SetRestartDir DEST$ CopyFilesInCopyList IF RestartListEmpty() = 0 THEN RESTARTWIN% = 1 END IF IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN CreateProgmanGroup "Q╖Media Demo", "", cmoNone ShowProgmanGroup "Q╖Media Demo", 1, cmoNone CreateProgmanItem "Q╖Media Demo", "Run Me First!!", MakePath(SRCDRIVE$+":\qmedia\demo","demo.exe"), SRCDRIVE$+":\qmedia\demo\demo.ico", cmoOverwrite CreateProgmanItem "Q╖Media Demo", "Q╖Media 2.0 Demo", MakePath(DEST$,"qmdemo.exe"), "", cmoOverwrite CreateProgmanItem "Q╖Media Demo", "Release Notes", MakePath(DEST$,"readme.wri"), "", cmoOverwrite CreateProgmanItem "Q╖Media Demo", "Q╖Media 2.0 Help", MakePath(DEST$,"qmedia.hlp"), "", cmoOverwrite DoDMABufferMod DoShareInstall DoOLE2Reg END IF ''Setup INI files for Multimedia Drivers IF GetListItem(CHECKSTATES$, OPTFILES1) = "ON" THEN DoVideoForWindowsInstall END IF IF GetListItem(CHECKSTATES$, OPTFILES2) = "ON" THEN DoAutodeskInstall END IF QUIT: ON ERROR GOTO ERRQUIT IF ERR = 0 THEN dlg% = EXITSUCCESS ELSEIF ERR = STFQUIT THEN dlg% = EXITQUIT ELSE dlg% = EXITFAILURE END IF QUITL1: sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO QUITL1 END IF UIPop 1 ARESTART: IF RESTARTWIN% > 0 THEN sz$ = UIStartDlg(CUIDLL$, RESTART, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO ARESTART ELSEIF sz$ = "CONTINUE" THEN UIPop 1 r% = ExitExecRestart() END IF UIPop 1 ELSEIF RESTARTWINCUST% > 0 THEN sz$ = UIStartDlg(CUIDLL$, RESTART_PLEASE, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO ARESTART ELSEIF sz$ = "CONTINUE" THEN UIPop 1 END IF END IF END ERRQUIT: i% = DoMsgBox("Setup sources were corrupted, call (604) 879-1190!", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND) END WRONGVER: i% = DoMsgBox("You must have Windows version 3.1 or higher to run this program. Contact your dealer!", "Wrong Version", MB_OK+MB_TASKMODAL+MB_ICONHAND) END WRONGPROCESSOR: i% = DoMsgBox("You must have an 80386 CPU or better to run this program. Contact your dealer!", "Wrong Processor", MB_OK+MB_TASKMODAL+MB_ICONHAND) END GETPATH: SetSymbolValue "EditTextIn", DEST$ SetSymbolValue "EditFocus", "END" GETPATHL1: sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$) IF sz$ = "CONTINUE" THEN olddest$ = DEST$ DEST$ = GetSymbolValue("EditTextOut") ''Validate new path. IF IsDirWritable(DEST$) = 0 THEN GOSUB BADPATH GOTO GETPATHL1 END IF UIPop 1 ''Truncate display if too long. IF LEN(DEST$) > 23 THEN ReplaceListItem DRIVETEXT$, 7, MID$(DEST$, 1, 23)+"..." ELSE ReplaceListItem DRIVETEXT$, 7, DEST$ END IF ''Recalc if path changed. IF (olddest$ <> DEST$) AND (olddest$ <> DEST$+"\") AND (olddest$+"\" <> DEST$) THEN RecalcPath SetDriveStatus END IF olddest$ = "" GOTO CUSTINST ELSEIF sz$ = "REACTIVATE" THEN RecalcPath SetDriveStatus GOTO GETPATHL1 ELSEIF sz$ = "EXIT" THEN GOSUB ASKQUIT GOTO GETPATHL1 ELSE UIPop 1 GOTO CUSTINST END IF TOOBIG: sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN RecalcPath SetDriveStatus GOTO TOOBIG END IF UIPop 1 RETURN BADPATH: sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN RecalcPath SetDriveStatus GOTO BADPATH END IF UIPop 1 RETURN ASKQUIT: sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "") IF sz$ = "EXIT" THEN UIPopAll ERROR STFQUIT ELSEIF sz$ = "REACTIVATE" THEN GOTO ASKQUIT ELSE UIPop 1 END IF RETURN '** '** Purpose: '** Adds the specified option files to the copy list. '** Arguments: '** ftype% - type of files to add, one of the following: '** '** Returns: '** none. '************************************************************************** SUB AddOptFilesToCopyList (ftype%) STATIC SrcDir$ = GetSymbolValue("STF_SRCDIR") WinDir$ = GetWindowsDir() WinSysDir$ = GetWindowsSysDir() IF GetListItem(CHECKSTATES$, ftype%) = "ON" THEN IF ftype% = APPFILES THEN AddSectionFilesToCopyList "Program Files", SrcDir$, DEST$ AddSectionFilesToCopyList "Borland", SrcDir$, WinSysDir$ AddSectionFilesToCopyList "OLE2", SrcDir$, WinSysDir$ AddSectionFilesToCopyList "Share", SrcDir$, WinSysDir$ AddSectionFilesToCopyList "Templates", SrcDir$, DEST$+"\template" AddSectionFilesToCopyList "Acheiva", SrcDir$, DEST$+"\samples\acheiva" ''AddSectionFilesToCopyList "Intro", SrcDir$, DEST$+"\samples\intro" ELSEIF ftype% = OPTFILES1 THEN AddSectionFilesToCopyList "VFW11", SrcDir$, WinSysDir$ AddSectionFilesToCopyList "OLE2", SrcDir$, WinSysDir$ AddSectionFilesToCopyList "IndeoIni", SrcDir$, WinDir$ AddSectionFilesToCopyList "MPlayer", SrcDir$, WinDir$ ELSEIF ftype% = OPTFILES2 THEN AddSectionFilesToCopyList "Autodesk", SrcDir$, WinSysDir$ END IF END IF SrcDir$ = "" END SUB '** '** Purpose: '** Recalculates disk space for the given option files and sets '** the status info symbol "StatusItemsText". '** Arguments: '** ftype% - type of files to add, one of the following: '** APPFILES, OPTFILES1, OPTFILES2, OPTFILES3,OPTFILES4 '** Returns: '** none. '************************************************************************* SUB RecalcOptFiles (ftype%) STATIC CursorSave% = ShowWaitCursor() ClearCopyList AddOptFilesToCopyList ftype% fExtra% = 0 IF ftype% = APPFILES THEN ListSym$ = APPNEEDS$ ELSEIF ftype% = OPTFILES1 THEN ListSym$ = OPT1NEEDS$ ELSEIF ftype% = OPTFILES2 THEN ListSym$ = OPT2NEEDS$ END IF StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "") cost& = 0 FOR i% = 1 TO 26 STEP 1 cost& = cost& + VAL(GetListItem(ListSym$, i%)) NEXT i% ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K" IF StillNeed& > 0 THEN ReplaceListItem BIGLIST$, ftype%, "YES" ELSE ReplaceListItem BIGLIST$, ftype%, "" END IF IF fExtra% THEN ReplaceListItem EXTRACOSTS$, ndrive%, "0" END IF RestoreCursor CursorSave% ListSym$ = "" END SUB '** '** Purpose: '** Recalculates disk space and sets option status info according '** to the current destination path. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB RecalcPath STATIC CursorSave% = ShowWaitCursor() RecalcOptFiles APPFILES RecalcOptFiles OPTFILES1 RecalcOptFiles OPTFILES2 RestoreCursor CursorSave% END SUB '** '** Purpose: '** Sets drive status info according to latest disk space calcs. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB SetDriveStatus STATIC drive$ = MID$(DEST$, 1, 1) ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1 cost& = VAL(GetListItem(APPNEEDS$, ndrive%)) + VAL(GetListItem(OPT1NEEDS$, ndrive%)) + VAL(GetListItem(OPT2NEEDS$, ndrive%)) free& = GetFreeSpaceForDrive(drive$) ReplaceListItem DRIVETEXT$, 1, drive$ + ":" ReplaceListItem DRIVETEXT$, 2, STR$(cost& / 1024) + " K" ReplaceListItem DRIVETEXT$, 3, STR$(free& / 1024) + " K" IF drive$ = WINDRIVE$ THEN ReplaceListItem DRIVETEXT$, 4, "" ReplaceListItem DRIVETEXT$, 5, "" ReplaceListItem DRIVETEXT$, 6, "" ELSE ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1 cost& = VAL(GetListItem(APPNEEDS$, ndrive%)) + VAL(GetListItem(OPT1NEEDS$, ndrive%)) + VAL(GetListItem(OPT2NEEDS$, ndrive%)) IF cost& = 0 THEN ReplaceListItem DRIVETEXT$, 4, "" ReplaceListItem DRIVETEXT$, 5, "" ReplaceListItem DRIVETEXT$, 6, "" ELSE free& = GetFreeSpaceForDrive(WINDRIVE$) ReplaceListItem DRIVETEXT$, 4, WINDRIVE$ + ":" ReplaceListItem DRIVETEXT$, 5, STR$(cost& / 1024) + " K" ReplaceListItem DRIVETEXT$, 6, STR$(free& / 1024) + " K" END IF END IF END SUB '** '** Purpose: '** Appends a file name to the end of a directory path, '** inserting a backslash character as needed. '** Arguments: '** szDir$ - full directory path (with optional ending "\") '** szFile$ - filename to append to directory '** Returns: '** Resulting fully qualified path name. '************************************************************************* FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING IF szDir$ = "" THEN MakePath = szFile$ ELSEIF szFile$ = "" THEN MakePath = szDir$ ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN MakePath = szDir$ + szFile$ ELSE MakePath = szDir$ + "\" + szFile$ END IF END FUNCTION ''*********************************************************************** ''Share Install ''*********************************************************************** SUB DoShareInstall STATIC WinDir$ = GetWindowsDir If IsShareActive = 0 Then CreateSysIniKeyValue WinDir$+"SYSTEM.INI", "386Enh", "device", "vshare.386", cmoOverwrite ''Message Already posted from DoDMABufferMod ''j% = PostMessage (65535, RebootMsg%, 0, 0) End IF END SUB ''*********************************************************************** ''Increase DMA Buffer Size ''*********************************************************************** SUB DoDMABufferMod STATIC WinDir$ = GetWindowsDir CreateSysIniKeyValue WinDir$+"SYSTEM.INI", "386Enh", "DMABUFFERSIZE", "056", cmoOverwrite j% = PostMessage (65535, RebootMsg%, 0, 0) END SUB ''*********************************************************************** ''OLE2 Registration ''*********************************************************************** SUB DoOLE2Reg STATIC WinSysDir$ = GetWindowsSysDir Run ("regedit.exe /s " + MakePath(WinSysDir$, "OLE2.reg")) Run ("regedit.exe /s " + MakePath(WinSysDir$, "cleanup.reg")) END SUB ''*********************************************************************** ''Autodesk Animation Install ''*********************************************************************** SUB DoAutodeskInstall STATIC WinDir$ = GetWindowsDir CreateIniKeyValue WinDir$ + "WIN.INI", "mci extensions", "fli", "Animation1", cmoOverwrite CreateIniKeyValue WinDir$ + "WIN.INI", "mci extensions", "flc", "Animation1", cmoOverwrite CreateIniKeyValue WinDir$ + "WIN.INI", "mci extensions", "aas", "Animation1", cmoOverwrite CreateIniKeyValue WinDir$ + "SYSTEM.INI", "mci", "Animation1", "mciaap.drv", cmoNone END SUB ''*********************************************************************** ''VFW11 Install ''*********************************************************************** SUB DoVideoForWindowsInstall STATIC WinDir$ = GetWindowsDir WinSysDir$ = GetWindowsSysDir ''Updating WIN.INI and SYSTEM.INI IF VflatdPresent() = 0 THEN CreateSysIniKeyValue WinDir$ + "system.ini", "386Enh", "device", "dva.386", cmoOverwrite END IF CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "VIDC.CVID", "iccvid.drv", cmoOverwrite CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "VIDC.MSVC", "msvidc.drv", cmoOverwrite CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "VIDC.IV31", "indeov.drv", cmoOverwrite CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "VIDC.MRLE", "MSRLE.drv", cmoOverwrite I% = DoesIniKeyExist ("system.ini", "Drivers", "VIDC.RT21") IF I% = 0 THEN CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "VIDC.RT21", "indeov.drv", cmoOverwrite END IF CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "VIDC.YVU9", "indeov.drv", cmoOverwrite CreateIniKeyValue WinDir$ + "WIN.INI", "mci extensions", "avi", "AVIVideo", cmoOverwrite CreateIniKeyValue WinDir$ + "system.ini", "mci", "AVIVideo", "mciavi.drv", cmoOverwrite CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "WaveMapper", "msacm.drv", cmoOverwrite CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "MSACM.msadpcm", "msadpcm.acm", cmoOverwrite CreateIniKeyValue WinDir$ + "system.ini", "Drivers", "MSACM.imaadpcm", "imaadpcm.acm", cmoOverwrite CreateIniKeyValue WinDir$ + "control.ini", "drivers.desc", "msacm.drv", "Microsoft Sound Mapper V2.00", cmoOverwrite CreateIniKeyValue WinDir$ + "control.ini", "drivers.desc", "msadpcm.acm", "Microsoft ADPCM Codec V2.00", cmoOverwrite CreateIniKeyValue WinDir$ + "control.ini", "drivers.desc", "imaadpcm.acm", "Microsoft IMA ADPCM Codec V2.00", cmoOverwrite Run ("regedit.exe /s " + MakePath(WinSysDir$, "mplayer.reg")) '' Do OLE2 registration DoOLE2Reg '' Mplayer CreateProgmanItem "Accessories", "Media Player", MakePath(WinDir$, "mplayer.exe"), "", cmoOverwrite END SUB ''*********************************************************************** ''Gold Disk Install ''*********************************************************************** SUB DoAWIInstall STATIC WinDir$ = GetWindowsDir CreateIniKeyValue WinDir$ + "WIN.INI", "mci extensions", "awm", "Animation2", cmoOverwrite CreateIniKeyValue WinDir$ + "WIN.INI", "mci extensions", "awa", "Animation2", cmoOverwrite CreateIniKeyValue WinDir$ + "SYSTEM.INI", "mci", "Animation2", "mciawi.drv", cmoNone END SUB